//1531快递分拣
 
#include<bits/stdc++.h>
using namespace std;
 //区别
map<string, vector<string>> mp;
vector<string> citys;
 
int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  int n; cin >> n;
  for (int i = 0; i < n; i ++) {
    string s, p;
    cin >> s >> p;
    if (!mp.count(p)) {//如果mp中没有当前城市P的信息，则将城市名称p存储到citys中，然后将当前城市s的快递信息添加到mp中
      citys.push_back(p);
    }
    mp[p].push_back(s);
  }
  /*citys是一个容器，存储了城市的数据。
  在循环的每次迭代中，city会依次代表citys容器中的每个元素，而const auto &部分表示city是一个常量引用
  这样做可以避免在循环中对city进行修改，同时也可以提高效率。
  */
  for(const auto &city: citys) {//遍历citys中的每个城市，一次输出城市名称和该城市的快递数量
    cout << city << ' ' << mp[city].size() << '\n';
    for (const auto &i: mp[city]) {//再输出该城市的所有快递信息
      cout << i << '\n';
    }
  }
  return 0;
}